local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.ModelObject());
local OrbitFolder=Instance.new("Folder",workspace)
local ConnectClass=_G.CommonOHOH.load.Connect();

OrbitFolder.Name="Orbit"
-- 轨道对象
function M.new(...)
	return M(...);
end;

--参数：管道模型,所属关卡对象
function M.ctor(self,model,level)--构造函数
  
	self.CreateNextOrbitEvent=ConnectClass.new() -- 触发生成下一条管道
    self.MineList={}
    self.Level=level --guand
    for _,p in pairs( model:GetDescendants()) do
        if p:IsA("BasePart") then
            p.Anchored=true
            p.CanTouch=false
            if p.Name=="Instance" then
                p.CanCollide=true
            elseif p.Name=="AirWall"  then
                p.CanCollide=true
            else
                p.Massless=true
                p.CanCollide=false
             
            end
        end
    end
    model.PrimaryPart=model:FindFirstChild("Instance")

    self.MineFolder=Instance.new("Folder",model)
    self.MineFolder.Name="Mine"
	M.super.ctor(self,model);
    -- 初始化矿的位置
    self.Slots=self:WaitForChild_Check("Point"):GetChildren()
end;


function M.dtor(self)

    if  self.CreateNextOrbitEvent then
        self.CreateNextOrbitEvent:dtor()
        self.CreateNextOrbitEvent=nil
    end
    
	M.super.dtor(self);
end;


-- 加载矿石
function M.LoadMine(self)

    self.AllMineCount=#self.Slots --总的矿石数量
    self.NowMineCount= self.AllMineCount --当前矿石数量
    self.MineCondtion=self.AllMineCount/4 --低于该数量的矿石，会触发生成新的矿石管道
    if self.MineCondtion<5 then
        self.MineCondtion=5
    end

    for k,s in pairs(self.Slots) do
        local cf=s:GetPivot()
        local m= self.Level:CreateMine(self:GetSortId(),k) --创建矿石
        m:Installation(cf,self.MineFolder)
        local guid=m:GetGuid()
        m.DeadEvent:Connect(function()
            self.NowMineCount=self.NowMineCount-1
            if self.NowMineCount<= self.MineCondtion then
                self.CreateNextOrbitEvent:Action() --触发生成下一条管道
                self:AddProcess(function()
                     task.wait()
                     self.CreateNextOrbitEvent:dtor()
                     self.CreateNextOrbitEvent=nil
                end)
            end
            self.MineList[guid]=nil
        end)
        self.MineList[guid]=m
    end
   
end


--显示管道
function M.Show(self)
    self.main_inst.Parent=OrbitFolder
end

-- 设置序列Id
function M.SetSortId(self,id)
    self.SortId=id
    self.main_inst.Name=self.SortId
end

--返回序列Id
function M.GetSortId(self)
    return  self.SortId
end
--安装，参数：安装位置
function M.Installation(self,cf)
    self:Show()
    self.main_inst:PivotTo(cf)
end


-- --获取矿的位置
-- function M.GetMineCFrame(self)
--     for _,v in pairs(self.Slots) do
--         if not v:GetAttribute("isUse") then
--             v:SetAttribute("isUse",true)
--             return v:GetPivot()
--         end
--     end
-- end

-- -- 添加矿
-- function M.AddMine(self,mineList)
--     local remaining={}
--     for _,mine in pairs(mineList) do
--         local cf= self:GetMineCFrame()
--         if cf then
--             mine:Installation(cf,self.MineFolder)
--             local guid=mine:GetGuid()
--             self.MineList[guid]=mine
--         else
--             table.insert(remaining,mine)
--         end
--     end

--     return remaining
-- end

function M.GetEndCFrame(self)
    local cf=self.main_inst:FindFirstChild("End"):GetPivot()
    return cf
end

function M.AddNext(self,last)
    self.Next=last
    last:Installation(self:GetEndCFrame())
    last:SetSortId(self:GetSortId()+1)
end





return M